package com.shike.hq.service.Impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.shike.hq.entity.Area;
import com.shike.hq.mapper.AreaMapper;
import com.shike.hq.service.AreaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.sql.Timestamp;
import java.util.ArrayList;

/**
 * AreaService接口实现类
 */
@Service
public class AreaServiceImpl extends ServiceImpl<AreaMapper,Area> implements AreaService {

  @Autowired
  private AreaMapper areaMapper;

  /**
   * 通过管理员区域id查询管理员可以管理到的区域
   * @param areaId 管理员的区域id
   * @return 查询到的区域列表
   */
  @Override
  public ArrayList<Area> selectAllAreaById(long areaId) {
    return areaMapper.selectAllAreaById(areaId);
  }

  /**
   * 根据所属区域id查询区域列表
   *
   * @param id 所属区域id
   * @return 区域列表 array list
   */
  @Override
  public ArrayList<Area> selectAreasByParent(long id) {
    return areaMapper.selectAreasByParent(id);
  }

  /**
   * 根据id更新区域信息（不推荐使用，请使用AreaService的UpdateById方法）
   *
   * @param area 新的区域信息
   * @return 影响的条数 long
   */
  @Deprecated
  @Override
  public long updateAreaById(Area area) {
    return areaMapper.updateAreaById(area);
  }

  /**
   * 根据id删除区域信息（不推荐使用，请使用AreaService的removeById方法）
   *
   * @param id 区域id
   * @return 影响的条数 long
   */
  @Deprecated
  @Override
  public long deleteAreaById(long id) {
    if (selectAreasByParent(id).size() == 0) {
      //如果该区域没有子区域
      return areaMapper.deleteAreaById(id);
    } else
      return 0;
  }

  /**
   * 根据id列表批量删除区域信息
   *
   * @param idList id列表
   * @return 影响的条数 long
   */
  @Override
  public long deleteAreasById(ArrayList<Long> idList) {
    long effectRows = 0;
    for (long id : idList) {
      if (selectAreasByParent(id).size() == 0) {
        //如果该区域没有子区域
        effectRows += areaMapper.deleteAreaById(id);
      }
    }
    return effectRows;
  }

  /**
   * 新增区域信息（不推荐使用，请使用AreaService的save方法）
   *
   * @param area 新增的区域信息
   * @return 影响的条数 long
   */
  @Deprecated
  @Override
  public long addArea(Area area) {
    area.setCreateTime(new Timestamp(System.currentTimeMillis()));
    return areaMapper.insertArea(area);
  }
}
